package com.example.d3_charset;

import java.util.Arrays;

/**
 * 目标：掌握如何使用Java代码完成对字符的编码和解码
 */
public class Test {
    public static void main(String[] args) throws Exception {
        /*
        注意1：字符编码时使用的字符集,要和解码的时候使用的字符集保持一致否则会出现乱码的情况
        注意2：因为和数组一般不会乱码
        假设现在有一个a我m这个字符使用的是gbk进行编码,但是现在却使用utf-8进行解码此时就会出现问题
        因为gbk中汉字占两个字节 且必须是1开头 英文是占一个字节0开头 此时 a我m
        UTF-8 汉字占三个字节 英文占一个字节
        GBK  0xxxxxxx  1xxxxxxx xxxxxxxx 0xxxxxxxx
        UTF-8在解码的时候发现不识别就会打上一个问号
        UTF-8  a            ?     ?           m
         */
        // 1.编码
        String data = "a我b";
        byte[] bytes = data.getBytes(); // 默认是按照平台字符集（UTF-8）进行编码的
        System.out.println(Arrays.toString(bytes));

        // 按照指定字符集进行编码
        byte[] bytes1 = data.getBytes("GBK"); // 指定字符集进行编码
        System.out.println(Arrays.toString(bytes1));

        // 2.解码
        String s1 = new String(bytes); // 按照平台默认编码（UTF-8）解码
        System.out.println(s1);

        String s2 = new String(bytes1, "GBK"); // 指定字符集解码
        System.out.println(s2);
    }
}

